Contents
Setup and data wrangling
Data tables
Swimmer’s plot
Supplemental figure
Survival analysis
Stratified survival analysis
Create KM for OS and PFS, stratify by HRCA
KM of OS & PFS, stratified by cell dose
KM of PFS, dose level 1-3 vs 4
Create KM for OS & DOR, stratified by sCR/CR vs VGPR/PR
Create KM for OS & PFS, stratified by treatment lines <8 vs >=8
Create KM for OS & PFS, stratified by hx of prior allo
Create KM for OS & PFS, stratified by PCL
Create KM for OS & PFS, stratified by receipt of prior BCMA-directed therapy
Create KM for OS & PFS, stratified by triple refractory disease
Create KM for OS & PFS, stratified by penta refractory disease
Create KM for OS & PFS, stratified by tumor burden (BMPCs <=30 vs >30)
Create KM for OS & PFS, stratified by tumor burden (BMPCs <70 vs >=70)
Create KM for OS & PFS, stratified by sBCMA at day 90 (< vs >= median)
Create KM for OS & PFS, stratified by sBCMA at day 60 (< vs >= median)
Create KM for OS & PFS, stratified by BCMA ABC at screening
Regression analysis
Scatterplot
Probability plots
Setup and data wrangling
Load necessary packages
Read in the data
Show code
db1 = read_excel ( path = "9762 data for analysis 1.29.24.xlsx" , sheet = "Survival" )
dataset <- db1 %>%
mutate (
dx_dt = ymd ( dx_dt ) ,
infuse_dt = ymd ( infuse_dt ) ,
birthdate = ymd ( birthdate ) ,
dt_relapse = ymd ( dt_relapse ) ,
Death.or.DLC = ymd ( Death.or.DLC ) ,
Death.or.relapse.or.DLC = ymd ( Death.or.relapse.or.DLC ) ,
Days.to.death.or.DLC = Death.or.DLC - infuse_dt ,
Days.to.death.or.relapse.or.DLC = Death.or.relapse.or.DLC - infuse_dt ,
Days.from.dx.to.infusion = infuse_dt - dx_dt ,
Age = ( infuse_dt - birthdate ) / 365 ,
relapse.or.death = ifelse ( relapse == 1 | death == 1 ,1 ,0 )
)
df <- data.frame (
pt_no = as.numeric ( 1 : 25 ) ,
Time.to.response = ifelse ( 1 : 25 == 19 , 60 , 28 )
)
dataset <- left_join (
x = dataset ,
y = df ,
by = "pt_no" )
Data tables
Table 1 reproduction
Show code
theme_gtsummary_compact ( )
dataset %>%
transmute (
"Age (years)" = Age ,
"Female sex" = ifelse ( sex == "f" , 1 , 0 ) ,
"Race" = recode ( race , "asian" = "Asian" , "white" = "White" ) ,
"ECOG performance status" = ecog ,
"Median time from diagnosis to CAR T cell therapy" = Days.from.dx.to.infusion / 365 ,
"Disease subtype" = factor ( subtype_category , levels = c ( "IgA" , "IgG" , "IgM" , "Light chain" , "Oligosecretory" , "Primary plasma cell leukemia" ) ) ,
"ISS disease stage at diagnosis" = iss ,
"Revised ISS disease stage at diagnosis" = riss ,
"ISS disease stage at enrollment" = iss_enrollment ,
"Revised ISS disease stage at enrollment" = riss_enrollment ,
"High-risk cytogenetic abnormality at any time" = HRCA ,
"t(4;14) any" = t414_any ,
"t(14;16) any" = t1416_any ,
"del(17p) any" = del17p_any ,
#"amp(1q) any" = amp1q_any,
"High bone marrow tumor burden" = ifelse ( High.tumor.burden == 1 , ">30%" , "10-30%" ) ,
"Extramedullary disease" = extramedullary ,
"Circulating plasma cells at screening" = cpcs ,
"Tumor BCMA expression (ABC)" = bcma_scrn ,
"Number of previous antimyeoma regimens" = factor ( case_when (
no_priortx <= 6 ~ "4-6" ,
no_priortx > 6 & no_priortx <= 9 ~ "7-9" ,
no_priortx > 9 ~ "10 or more" ) , levels = c ( "4-6" , "7-9" , "10 or more" ) ) ,
"Previous autologous HCT" = factor ( case_when (
no_auto == 0 ~ "0" ,
no_auto == 1 ~ "1" ,
no_auto > 1 ~ ">1" ) , levels = c ( "0" ,"1" ,">1" ) ) ,
"Previous allogeneic HCT" = allo
) %>%
tbl_summary (
missing = "ifany" ,
statistic = list (
all_continuous ( ) ~ "{median} ({min} to {max})" ,
all_categorical ( ) ~ "{n} ({p}%)"
)
) %>%
bold_labels ( ) %>%
add_variable_grouping (
"High-risk cytogenetic abnormality at any time" = c ( "t(4;14) any" , "t(14;16) any" , "del(17p) any" , "amp(1q) any" )
)
Characteristic
N = 25
Age (years)
64 (38 to 77)
Female sex
9 (36%)
Race
Asian
3 (12%)
White
22 (88%)
ECOG performance status
0
5 (20%)
1
17 (68%)
2
3 (12%)
Median time from diagnosis to CAR T cell therapy
5.1 (1.6 to 14.6)
Disease subtype
IgA
4 (16%)
IgG
13 (52%)
IgM
2 (8.0%)
Light chain
3 (12%)
Oligosecretory
1 (4.0%)
Primary plasma cell leukemia
2 (8.0%)
ISS disease stage at diagnosis
1
4 (20%)
2
6 (30%)
3
10 (50%)
Unknown
5
Revised ISS disease stage at diagnosis
1
2 (18%)
2
3 (27%)
3
6 (55%)
Unknown
14
ISS disease stage at enrollment
1
12 (63%)
2
5 (26%)
3
2 (11%)
Unknown
6
Revised ISS disease stage at enrollment
1
6 (32%)
2
11 (58%)
3
2 (11%)
Unknown
6
High-risk cytogenetic abnormality at any time
14 (56%)
High-risk cytogenetic abnormality at any time
t(4;14) any
2 (8.0%)
t(14;16) any
2 (8.0%)
del(17p) any
13 (52%)
High bone marrow tumor burden
>30%
18 (72%)
10-30%
7 (28%)
Extramedullary disease
11 (44%)
Circulating plasma cells at screening
5 (20%)
Tumor BCMA expression (ABC)
620 (175 to 5,521)
Number of previous antimyeoma regimens
4-6
6 (24%)
7-9
13 (52%)
10 or more
6 (24%)
Previous autologous HCT
0
5 (20%)
1
13 (52%)
>1
7 (28%)
Previous allogeneic HCT
5 (20%)
Swimmer’s plot
Show code
swimmer_data = as.data.frame ( read_excel ( path = "9762 swimmer.xlsx" , sheet = "Response" ) ) %>%
mutate (
Response_start = Response_start / 30 ,
Response_end = Response_end / 30 ,
Arrow_start = Arrow_start / 30 ,
Time = Time / 30 ,
Response = factor ( Response , levels= c ( "PD" ,"sCR" ,"CR" ,"VGPR" ,"PR" ,"SD" ) ) ,
Number = paste ( id , Tumor_burden )
)
pastel1_palette <- brewer.pal ( 8 , "Pastel1" ) [ 2 : 7 ]
swimmer_plot ( df= filter ( swimmer_data , ! is.na ( Response ) ) ,
id= "Number" ,
label_value = vars ( "Tumor_burden" ) ,
end= "Response_end" ,
name_fill= "Response" ,
stratify = "Dose_level" ,
identifiers = TRUE ,
width= .8
) +
scale_fill_manual ( values = pastel1_palette [ c ( 6 ,2 ,1 ,3 ,4 ,5 ) ] ) +
swimmer_arrows ( df_arrows = filter ( swimmer_data ,! is.na ( Arrow_start ) ) ,id= "Number" ,arrow_start= "Arrow_start" , name_col = 'Response' , type = "open" , cex= 1 , arrow_positions = c ( 1 ,5 ) ) +
swimmer_points ( df_points= filter ( swimmer_data ,! is.na ( Event ) ) ,id= 'Number' ,name_shape = "Event" , time= 'Time' ,size= 2 ,fill= 'white' ,col= "black" ) +
scale_y_continuous ( name = "Time since infusion (Months)" ,breaks = seq ( 0 ,10000 ,by= 12 ) ) +
guides ( fill = guide_legend ( title = "Response" ) , colour = FALSE ) + # Hide the legend for arrows
facet_col ( vars ( Dose_level ) , scales = "free_y" , space = "free" )
sBCMA plots
Show code
sBCMA_data = as.data.frame ( read_excel ( path = "sBCMA data.xlsx" ) )
ggplot ( sBCMA_data , aes ( x = timepoint / 30 , y = sBCMA , color = Tumor.burden ) ) +
geom_point ( shape = 16 , size = 2 ) +
theme_classic ( ) +
labs ( x = "Time (months)" , y = "sBCMA" ) +
scale_color_discrete ( name = "Tumor burden" ) +
facet_wrap ( ~ Number , scales = "free_y" , ncol = 5 ) + # Facet by the "Number" variable with free y-axes and 2 columns
scale_y_log10 ( limits = c ( 0.01 , 10000 ) ) +
scale_x_continuous ( breaks = seq ( 0 , 48 , by = 12 ) ) +
theme ( strip.text = element_text ( size = 9 ) ) +
geom_vline ( aes ( xintercept = Relapse.time / 30 ) , linetype = "dashed" , color = "black" ) # Add vertical line
Survival analysis
Length of follow-up
Show code
data1 = dataset %>%
mutate (
Reverse_death = ifelse ( death == 1 , 0 ,1 )
)
#quantile(prodlim(Hist(time = Real.days.DLC/30, Real.death )~1, data = data1, reverse = TRUE ) )
reverse_km_OS <- survfit ( Surv ( Days.to.death.or.DLC / 30 , Reverse_death ) ~ 1 , data1 )
reverse_km_OS
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, Reverse_death) ~
1, data = data1)
n events median 0.95LCL 0.95UCL
[1,] 25 6 58.6 47.4 NA
Create KM for OS and PFS
Show code
km_OS <- survfit ( Surv ( Days.to.death.or.DLC / 30 , death ) ~ 1 , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS $ plot <- OS $ plot + geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) + annotate ( "text" , x = med_OS $ median + 0.5 , y = 0.54 , label = paste ( signif ( med_OS $ median , 2 ) , "(95% CI, " , signif ( med_OS $ lower , 2 ) , "to" , signif ( med_OS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
OS
Show code
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, death) ~ 1, data = dataset)
n events median 0.95LCL 0.95UCL
[1,] 25 19 32.1 20.4 NA
Show code
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, death) ~ 1, data = dataset)
time n.risk n.event survival std.err lower 95% CI upper 95% CI
12 22 3 0.88 0.065 0.761 1
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ 1 , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS $ plot <- PFS $ plot + geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) + annotate ( "text" , x = med_PFS $ median + 0.5 , y = 0.54 , label = paste ( signif ( med_PFS $ median , 2 ) , "(95% CI, " , signif ( med_PFS $ lower , 2 ) , "to" , signif ( med_PFS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ 1, data = dataset)
n events median 0.95LCL 0.95UCL
[1,] 25 24 15.5 8.73 27.1
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ 1, data = dataset)
time n.risk n.event survival std.err lower 95% CI upper 95% CI
12 16 9 0.64 0.096 0.477 0.859
PFS and OS on the same plot
Show code
OS_EFS <- ggsurvplot_combine ( list ( km_PFS , km_OS ) ,
data= dataset ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.3 ,
tables.theme = theme_cleantable ( ) ,
surv.median.line = "hv" , # Specify median survival
ggtheme = theme_classic ( ) +
theme (
axis.text.x = element_text ( size = 12 ) , # Increase x-axis label font size
axis.text.y = element_text ( size = 12 ) , # Increase y-axis label font size
axis.title.x = element_text ( size = 14 ) , # Increase x-axis title font size
axis.title.y = element_text ( size = 14 ) , # Increase y-axis title font size
plot.title = element_text ( size = 12 ) , # Increase plot title font size
legend.text = element_text ( size = 12 ) , # Increase legend text font size
legend.title = element_text ( size = 12 ) # Increase legend title font size
) ,
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "PFS & OS (%)" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
#fun=formula,
legend.labs = c ( "PFS" ,"OS" ) ,
surv.scale = "percent" ,
censor= FALSE
)
OS_EFS $ plot <- OS_EFS $ plot +
geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) +
geom_vline ( xintercept = median ( km_OS ) [ 1 ] , linetype = "dashed" , color = "grey" ) +
geom_vline ( xintercept = median ( km_PFS ) [ 1 ] , linetype = "dashed" , color = "grey" ) +
annotate ( "text" , x = med_OS $ median + 0.5 , y = 0.85 , label = paste ( signif ( med_OS $ median , 2 ) , "(" , signif ( med_OS $ lower , 2 ) , "-" , signif ( med_OS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 ) +
annotate ( "text" , x = med_PFS $ median + 0.5 , y = 0.95 , label = paste ( signif ( med_PFS $ median , 2 ) , "(" , signif ( med_PFS $ lower , 2 ) , "-" , signif ( med_PFS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
OS_EFS
Create KM for DOR
Show code
km_DOR <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - Time.to.response ) / 30 , relapse.or.death ) ~ 1 , data = dataset )
med_DOR <- surv_median ( km_DOR )
DOR <- ggsurvplot ( km_DOR ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Duration of response" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
DOR $ plot <- DOR $ plot + geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) + annotate ( "text" , x = med_DOR $ median + 0.5 , y = 0.54 , label = paste ( signif ( med_DOR $ median , 2 ) , "(95% CI, " , signif ( med_DOR $ lower , 2 ) , "to" , signif ( med_DOR $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
DOR
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - Time.to.response)/30,
relapse.or.death) ~ 1, data = dataset)
n events median 0.95LCL 0.95UCL
[1,] 25 24 14.6 7.8 26.2
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - Time.to.response)/30,
relapse.or.death) ~ 1, data = dataset)
time n.risk n.event survival std.err lower 95% CI upper 95% CI
12 14 11 0.56 0.0993 0.396 0.793
Stratified survival analysis
Create KM for OS and PFS, stratify by HRCA
Show code
km_OS <- survfit ( Surv ( Days.to.death.or.DLC / 30 , death ) ~ HRCA , data = dataset )
km_OS
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, death) ~ HRCA,
data = dataset)
n events median 0.95LCL 0.95UCL
HRCA=0 11 8 33.0 25.4 NA
HRCA=1 14 11 22.8 17.7 NA
Show code
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
legend.labs = c ( "Standard" ,"High risk" )
)
#OS$plot <- OS$plot + geom_hline(yintercept = 0.5, linetype = "dashed", color = "grey") + annotate("text", x = med_OS$median + 0.5, y = 0.54, label = paste("Median =", signif(med_OS$median, 2), "(95% CI, ", signif(med_OS$lower, 2), "to", signif(med_OS$upper, 2),")"), hjust = 0, size = 5)
OS
Show code
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse.or.death ) ~ HRCA , data = dataset )
km_PFS
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse.or.death) ~
HRCA, data = dataset)
n events median 0.95LCL 0.95UCL
HRCA=0 11 10 23.2 8.07 NA
HRCA=1 14 14 13.3 8.73 27.5
Show code
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
legend.labs = c ( "Standard" ,"High risk" )
)
#PFS$plot <- PFS$plot + geom_hline(yintercept = 0.5, linetype = "dashed", color = "grey") + annotate("text", x = med_PFS$median + 0.5, y = 0.54, label = paste("Median =", signif(med_PFS$median, 2), "(95% CI, ", signif(med_PFS$lower, 2), "to", signif(med_PFS$upper, 2),")"), hjust = 0, size = 5)
PFS
KM of OS & PFS, stratified by cell dose
Show code
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse.or.death ) ~ intended_cell_dose , data = dataset )
km_PFS
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse.or.death) ~
intended_cell_dose, data = dataset)
n events median 0.95LCL
intended_cell_dose=Dose level 1 - 50E6 7 7 15.50 5.87
intended_cell_dose=Dose level 2 - 150E6 8 7 24.32 12.20
intended_cell_dose=Dose level 3 - 300E6 7 7 23.20 12.63
intended_cell_dose=Dose level 4 - 450E6 3 3 7.87 3.07
0.95UCL
intended_cell_dose=Dose level 1 - 50E6 NA
intended_cell_dose=Dose level 2 - 150E6 NA
intended_cell_dose=Dose level 3 - 300E6 NA
intended_cell_dose=Dose level 4 - 450E6 NA
Show code
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.4 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
#legend.labs = c("Standard","High risk")
)
PFS
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ intended_cell_dose , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.4 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ intended_cell_dose,
data = data1)
n events median 0.95LCL
intended_cell_dose=Dose level 1 - 50E6 7 7 25.4 10.1
intended_cell_dose=Dose level 2 - 150E6 8 4 58.4 27.5
intended_cell_dose=Dose level 3 - 300E6 7 5 32.1 20.4
intended_cell_dose=Dose level 4 - 450E6 3 3 18.5 16.6
0.95UCL
intended_cell_dose=Dose level 1 - 50E6 NA
intended_cell_dose=Dose level 2 - 150E6 NA
intended_cell_dose=Dose level 3 - 300E6 NA
intended_cell_dose=Dose level 4 - 450E6 NA
KM of PFS, dose level 1-3 vs 4
Show code
data1 <- dataset %>%
mutate (
dose_level = ifelse ( intended_cell_dose == "Dose level 1 - 50E6" ,"1" ,"2-4" )
)
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse.or.death ) ~ dose_level , data = data1 )
km_PFS
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse.or.death) ~
dose_level, data = data1)
n events median 0.95LCL 0.95UCL
dose_level=1 7 7 15.5 5.87 NA
dose_level=2-4 18 17 17.5 8.73 31.7
Show code
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,60 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Level 1" ,"Level 2-4" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
pval.coord = c ( 47 , 0.8 )
)
PFS
Create KM for OS & DOR, stratified by sCR/CR vs VGPR/PR
Show code
data1 <- dataset %>%
mutate (
response.category = recode ( best_response , "scr" = "sCR/CR" , "cr" = "sCR/CR" , "vgpr" = "VGPR/PR" , "pr" = "VGPR/PR" )
)
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ response.category , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "sCR/CR" ,"VGPR/PR" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ response.category,
data = data1)
n events median 0.95LCL 0.95UCL
response.category=sCR/CR 17 12 36.0 27.5 NA
response.category=VGPR/PR 8 7 19.1 17.1 NA
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ response.category , data = data1 )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "sCR/CR" ,"VGPR/PR" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ response.category, data = data1)
n events median 0.95LCL 0.95UCL
response.category=sCR/CR 17 16 21.13 15.50 28.2
response.category=VGPR/PR 8 8 8.22 7.87 NA
Create KM for OS & PFS, stratified by treatment lines <8 vs >=8
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ prior.lines.8 , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "<8" ,"\u22658" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ prior.lines.8, data = data1)
n events median 0.95LCL 0.95UCL
prior.lines.8=0 11 10 12.6 8.37 NA
prior.lines.8=1 14 14 19.6 12.20 31.7
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ prior.lines.8 , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "<8" ,"\u22658" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ prior.lines.8,
data = data1)
n events median 0.95LCL 0.95UCL
prior.lines.8=0 11 7 20.4 17.7 NA
prior.lines.8=1 14 12 33.0 25.4 NA
Create KM for OS & PFS, stratified by hx of prior allo
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ allo , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ allo, data = data1)
n events median 0.95LCL 0.95UCL
allo=0 20 19 16.0 8.07 28.2
allo=1 5 5 15.5 12.20 NA
Show code
#summary(km_PFS,times=c(12))
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ allo , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ allo,
data = data1)
n events median 0.95LCL 0.95UCL
allo=0 20 15 27.5 20.4 NA
allo=1 5 4 61.5 17.7 NA
Show code
#summary(km_OS,times=c(12))
Create KM for OS & PFS, stratified by PCL
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ PCL , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ PCL, data = data1)
n events median 0.95LCL 0.95UCL
PCL=0 23 22 18.00 12.20 27.5
PCL=1 2 2 6.45 4.53 NA
Show code
#summary(km_PFS,times=c(12))
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ PCL , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ PCL,
data = data1)
n events median 0.95LCL 0.95UCL
PCL=0 23 17 33.0 22.80 NA
PCL=1 2 2 11.9 6.07 NA
Show code
#summary(km_OS,times=c(12))
Create KM for OS & PFS, stratified by receipt of prior BCMA-directed therapy
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ any_bcma_tx , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ any_bcma_tx, data = data1)
n events median 0.95LCL 0.95UCL
any_bcma_tx=0 22 21 16.8 8.73 27.5
any_bcma_tx=1 3 3 12.2 5.87 NA
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ any_bcma_tx, data = data1)
any_bcma_tx=0
time n.risk n.event survival std.err
12.000 14.000 8.000 0.636 0.103
lower 95% CI upper 95% CI
0.464 0.873
any_bcma_tx=1
time n.risk n.event survival std.err
12.000 2.000 1.000 0.667 0.272
lower 95% CI upper 95% CI
0.300 1.000
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ any_bcma_tx , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ any_bcma_tx,
data = data1)
n events median 0.95LCL 0.95UCL
any_bcma_tx=0 22 17 27.5 20.4 NA
any_bcma_tx=1 3 2 32.1 10.1 NA
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ any_bcma_tx,
data = data1)
any_bcma_tx=0
time n.risk n.event survival std.err
12.0000 20.0000 2.0000 0.9091 0.0613
lower 95% CI upper 95% CI
0.7966 1.0000
any_bcma_tx=1
time n.risk n.event survival std.err
12.000 2.000 1.000 0.667 0.272
lower 95% CI upper 95% CI
0.300 1.000
Create KM for OS & PFS, stratified by triple refractory disease
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ triple_ref , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ triple_ref, data = dataset)
n events median 0.95LCL 0.95UCL
triple_ref=0 5 5 12.2 8.37 NA
triple_ref=1 20 19 16.8 8.73 27.5
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ triple_ref , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ triple_ref,
data = dataset)
n events median 0.95LCL 0.95UCL
triple_ref=0 5 4 27.5 18.5 NA
triple_ref=1 20 15 32.1 20.4 NA
Create KM for OS & PFS, stratified by penta refractory disease
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ pentaref , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ pentaref, data = dataset)
n events median 0.95LCL 0.95UCL
pentaref=0 8 8 16.0 12.20 NA
pentaref=1 17 16 15.5 8.07 27.5
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ triple_ref , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ triple_ref,
data = dataset)
n events median 0.95LCL 0.95UCL
triple_ref=0 5 4 27.5 18.5 NA
triple_ref=1 20 15 32.1 20.4 NA
Create KM for OS & PFS, stratified by tumor burden (BMPCs <=30 vs >30)
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ High.tumor.burden , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ High.tumor.burden, data = dataset)
n events median 0.95LCL 0.95UCL
High.tumor.burden=0 7 6 21.1 7.33 NA
High.tumor.burden=1 18 18 13.3 8.37 27.1
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ High.tumor.burden , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ High.tumor.burden,
data = dataset)
n events median 0.95LCL 0.95UCL
High.tumor.burden=0 7 4 62.0 25.4 NA
High.tumor.burden=1 18 15 22.8 17.7 NA
Create KM for OS & PFS, stratified by tumor burden (BMPCs <70 vs >=70)
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ Tumor.greater.equal.70 , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ Tumor.greater.equal.70, data = dataset)
n events median 0.95LCL 0.95UCL
Tumor.greater.equal.70=0 14 13 19.6 12.20 42.8
Tumor.greater.equal.70=1 11 11 12.6 8.07 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ Tumor.greater.equal.70 , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ Tumor.greater.equal.70,
data = dataset)
n events median 0.95LCL 0.95UCL
Tumor.greater.equal.70=0 14 9 48.6 25.4 NA
Tumor.greater.equal.70=1 11 10 20.4 17.1 NA
Show code
[1] 3.13
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - 90 ) / 30 , relapse.or.death ) ~ sBCMA.high , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 90)/30,
relapse.or.death) ~ sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 10 10 21.80 15.00 NA
sBCMA.high=1 11 10 5.37 4.87 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC - 90 ) / 30 , death ) ~ sBCMA.high , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC - 90)/30, death) ~
sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 10 7 55.4 30.0 NA
sBCMA.high=1 11 9 19.8 14.1 NA
Show code
[1] 5.415
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - 60 ) / 30 , relapse.or.death ) ~ sBCMA.high , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 60)/30,
relapse.or.death) ~ sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 12 12 20.2 10.63 NA
sBCMA.high=1 12 11 11.1 6.07 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC - 60 ) / 30 , death ) ~ sBCMA.high , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC - 60)/30, death) ~
sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 12 8 34.0 30.1 NA
sBCMA.high=1 12 10 17.1 13.5 NA
Create KM for OS & PFS, stratified by BCMA ABC at screening
Show code
[1] 620
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse.or.death ) ~ BCMA.high , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse.or.death) ~ BCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
BCMA.high=0 12 12 13.3 8.07 NA
BCMA.high=1 13 12 21.1 8.37 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ BCMA.high , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ BCMA.high,
data = data1)
n events median 0.95LCL 0.95UCL
BCMA.high=0 12 8 22.8 18.5 NA
BCMA.high=1 13 11 36.0 17.7 NA
Regression analysis
Cox regression
Show code
theme_gtsummary_compact ( )
preds <- c ( "HRCA" , "cnLOH" , "response.category" , "intended_cell_dose" , "High.tumor.burden" ,"any_bcma_tx" ,"pentaref" ,"triple_ref" ,"bcma_scrn" , "sBCMA.d90" , "sBCMA.d60" , "sbcma_nadir" ,"sbcma_nadir_timepoint" , "Tumor.burden" )
data1 <- dataset %>%
mutate (
response.category = recode ( best_response , "scr" = "sCR/CR" , "cr" = "sCR/CR" , "vgpr" = "VGPR/PR" , "pr" = "VGPR/PR" ) ,
sBCMA.d90 = sBCMA.d90 / 10 ,
sBCMA.d60 = sBCMA.d60 / 10 ,
sbcma_nadir = sbcma_nadir / 10 ,
bcma_scrn = log10 ( bcma_scrn )
)
uv_tab_OS <- tbl_uvregression (
data1 [ c ( preds ) ] ,
method = coxph ,
y = Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ,
exponentiate = TRUE
) %>%
sort_p ( )
uv_tab_PFS <- tbl_uvregression (
data1 [ c ( preds ) ] ,
method = coxph ,
y = Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse.or.death ) ,
exponentiate = TRUE
)
tbl_merge ( list ( uv_tab_OS , uv_tab_PFS ) , tab_spanner = c ( "**OS**" , "**PFS**" ) )
Characteristic
OS
PFS
N
HR
95% CI
p-value
N
HR
95% CI
p-value
sBCMA.d90
22
3.26
1.42, 7.48
0.005
22
2.68
1.10, 6.53
0.030
sBCMA.d60
24
1.50
1.12, 2.02
0.007
24
1.56
1.09, 2.24
0.015
sbcma_nadir
22
1.42
1.05, 1.93
0.024
22
1.64
1.00, 2.68
0.049
response.category
25
25
sCR/CR
—
—
—
—
VGPR/PR
3.28
1.16, 9.25
0.025
1.89
0.78, 4.58
0.2
Tumor.burden
25
1.02
1.00, 1.04
0.063
25
1.02
1.00, 1.04
0.092
High.tumor.burden
25
3.13
0.90, 10.9
0.074
25
1.75
0.68, 4.49
0.2
bcma_scrn
25
0.21
0.03, 1.58
0.13
25
0.43
0.08, 2.22
0.3
intended_cell_dose
25
25
Dose level 1 - 50E6
—
—
—
—
Dose level 2 - 150E6
0.53
0.14, 1.98
0.3
0.30
0.09, 0.98
0.047
Dose level 3 - 300E6
1.04
0.29, 3.74
>0.9
0.39
0.13, 1.23
0.11
Dose level 4 - 450E6
2.96
0.62, 14.1
0.2
2.79
0.63, 12.4
0.2
sbcma_nadir_timepoint
22
1.00
0.99, 1.00
0.4
22
1.00
0.99, 1.00
0.5
cnLOH
22
1.23
0.42, 3.59
0.7
22
0.86
0.33, 2.23
0.8
pentaref
25
0.90
0.33, 2.45
0.8
25
0.81
0.34, 1.95
0.6
triple_ref
25
0.89
0.29, 2.75
0.8
25
0.71
0.26, 1.94
0.5
any_bcma_tx
25
1.12
0.25, 4.97
0.9
25
1.85
0.53, 6.48
0.3
HRCA
25
1.01
0.39, 2.65
>0.9
25
2.08
0.85, 5.10
0.11
Scatterplot
TTR by BCMA ABC at baseline in relapsed patients
Show code
data1 <- dataset %>%
filter ( relapse == 1 ) %>%
transmute (
bcma_scrn = log ( bcma_scrn ) ,
time.to.relapse = Days.to.death.or.relapse.or.DLC / 30
)
ggplot ( data1 , aes ( x= time.to.relapse , y = bcma_scrn ) ) +
geom_point ( shape = 16 ) + # Add points to the plot with shape 16 (i.e., basic circle)
theme_classic ( ) + # Use the minimal theme
geom_smooth ( aes ( x = time.to.relapse , y= bcma_scrn ) , method = "lm" , se = TRUE , color = "#104a8e" , inherit.aes = FALSE , linetype = "solid" , linewidth = 0.5 ) +
stat_cor ( method = "pearson" , label.x = 3 , label.y = 9 ) +
labs ( x = "Time to relapse (months)" , y = "log(BCMA ABC)" )
Probability plots
Hazard of OS/PFS vs sBCMA d90
Show code
data1 <- dataset %>%
select ( sBCMA.d90 , Days.to.death.or.DLC , death , Days.to.death.or.relapse.or.DLC , relapse.or.death )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
fit1 <- cph ( Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ~ rcs ( sBCMA.d90 ,3 ) , data= data1 )
df1 <- data.frame ( Predict ( fit1 , sBCMA.d90 , fun= function ( x ) exp ( x ) ) )
fit2 <- cph ( Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse.or.death ) ~ rcs ( sBCMA.d90 ,3 ) , data= data1 )
df2 <- data.frame ( Predict ( fit2 , sBCMA.d90 , fun= function ( x ) exp ( x ) ) )
ggplot ( ) +
geom_line ( data= df1 , aes ( x= sBCMA.d90 ,y= yhat , color = "OS" ) ) + geom_ribbon ( data= df1 , aes ( x= sBCMA.d90 ,ymin= lower , ymax= upper ) ,alpha= 0.10 , fill = "steelblue" ) +
geom_line ( data= df2 , aes ( x= sBCMA.d90 ,y= yhat , color = "PFS" ) ) + geom_ribbon ( data = df2 , aes ( x= sBCMA.d90 ,ymin= lower , ymax= upper ) ,alpha= 0.10 , fill= "coral2" ) +
labs ( x = "sBCMA d90" ,
y = "Hazard" ) +
theme_classic ( ) +
scale_y_continuous ( breaks= c ( 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 , 9 ) ) +
#scale_x_continuous(breaks=c(0.25,0.5,0.75,1.0,1.25,1.5,1.75), limits=c(0.25, 1.75)) +
theme ( legend.position = c ( 0 , 1 ) ,legend.justification = c ( - 0.5 , 1.1 ) ) +
scale_color_manual ( values = c ( "steelblue" ,"coral2" ) ) +
theme ( title = element_text ( size= 20 ,face= "bold" ) ,legend.title= element_blank ( ) ) +
coord_cartesian ( ylim = c ( 0 , 4 ) )
Hazard of OS/PFS vs tumor burden (BMPCs)
Show code
data1 <- dataset %>%
select ( Tumor.burden , Days.to.death.or.DLC , death , Days.to.death.or.relapse.or.DLC , relapse.or.death )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
fit1 <- cph ( Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ~ rcs ( Tumor.burden ,3 ) , data= data1 )
df1 <- data.frame ( Predict ( fit1 , Tumor.burden , fun= function ( x ) exp ( x ) ) )
fit2 <- cph ( Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse.or.death ) ~ rcs ( Tumor.burden ,3 ) , data= data1 )
df2 <- data.frame ( Predict ( fit2 , Tumor.burden , fun= function ( x ) exp ( x ) ) )
ggplot ( ) +
geom_line ( data= df1 , aes ( x= Tumor.burden ,y= yhat , color = "OS" ) ) + geom_ribbon ( data= df1 , aes ( x= Tumor.burden ,ymin= lower , ymax= upper ) ,alpha= 0.10 , fill = "steelblue" ) +
geom_line ( data= df2 , aes ( x= Tumor.burden ,y= yhat , color = "PFS" ) ) + geom_ribbon ( data = df2 , aes ( x= Tumor.burden ,ymin= lower , ymax= upper ) ,alpha= 0.10 , fill = "coral2" ) +
labs ( x = "Tumor burden (BMPCs)" ,
y = "Hazard" ) +
theme_classic ( ) +
#scale_y_continuous(breaks=c(10, 20, 30, 40, 50, 60, 70, 80 ,90,100)) +
#scale_x_continuous(breaks=c(0.25,0.5,0.75,1.0,1.25,1.5,1.75), limits=c(0.25, 1.75)) +
theme ( legend.position = c ( 0 , 1 ) ,legend.justification = c ( - 0.5 , 1.1 ) ) +
scale_color_manual ( values = c ( "steelblue" ,"coral2" ) ) +
theme ( title = element_text ( size= 20 ,face= "bold" ) ,legend.title= element_blank ( ) ) +
coord_cartesian ( ylim = c ( 0 , 2.5 ) )
Hazard of OS/PFS vs screening BCMA ABC
Show code
data1 <- dataset %>%
select ( bcma_scrn , Days.to.death.or.DLC , death , Days.to.death.or.relapse.or.DLC , relapse.or.death )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
fit1 <- cph ( Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ~ rcs ( bcma_scrn ,3 ) , data= data1 )
df1 <- data.frame ( Predict ( fit1 , bcma_scrn , fun= function ( x ) exp ( x ) ) )
fit2 <- cph ( Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse.or.death ) ~ rcs ( bcma_scrn ,3 ) , data= data1 )
df2 <- data.frame ( Predict ( fit2 , bcma_scrn , fun= function ( x ) exp ( x ) ) )
ggplot ( ) +
geom_line ( data= df1 , aes ( x= bcma_scrn ,y= yhat , color = "OS" ) ) + geom_ribbon ( data= df1 , aes ( x= bcma_scrn ,ymin= lower , ymax= upper ) ,alpha= 0.10 , fill = "steelblue" ) +
geom_line ( data= df2 , aes ( x= bcma_scrn ,y= yhat , color = "PFS" ) ) + geom_ribbon ( data = df2 , aes ( x= bcma_scrn ,ymin= lower , ymax= upper ) ,alpha= 0.10 , fill = "coral2" ) +
labs ( x = "BCMA screen" ,
y = "Hazard" ) +
theme_classic ( ) +
theme ( legend.position = c ( 0 , 1 ) ,legend.justification = c ( - 7.5 , 1.1 ) ) +
scale_color_manual ( values = c ( "steelblue" ,"coral2" ) ) +
theme ( title = element_text ( size= 20 ,face= "bold" ) ,legend.title= element_blank ( ) ) +
coord_cartesian ( ylim = c ( 0 , 2.5 ) )